home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / DialogView.C < prev    next >
C/C++ Source or Header  |  1992-07-08  |  3KB  |  153 lines

  1. #ifdef __GNUG__
  2. #pragma implementation
  3. #endif
  4.  
  5. #include "DialogView.h"
  6.  
  7. #include "Class.h"
  8. #include "OrdColl.h"
  9.  
  10. extern bool testwindow;
  11.  
  12. //---- DialogView --------------------------------------------------------------
  13.  
  14. NewAbstractMetaImpl(DialogView,View, (TP(dialogRoot)));
  15.  
  16. DialogView::DialogView(EvtHandler *eh) : View(eh, Point(3000))
  17. {
  18.     dialogRoot= 0;
  19. }
  20.  
  21. DialogView::~DialogView()
  22. {
  23.     SafeDelete(dialogRoot);
  24. }
  25.  
  26. void DialogView::ExtentChanged(VObject*)
  27. {
  28.     Point oldextent(GetExtent());
  29.     CalcLayout(TRUE);
  30.     if (oldextent != GetExtent())
  31.     View::ExtentChanged(this);
  32. }
  33.  
  34. VObject *DialogView::GetDialogRoot()
  35. {
  36.     if (dialogRoot == 0)
  37.     SetDialog(DoCreateDialog(), FALSE);
  38.     return dialogRoot;
  39. }
  40.  
  41. void DialogView::Open(bool mode)
  42. {
  43.     View::Open(mode);
  44.     GetDialogRoot();
  45.     if (dialogRoot)
  46.     dialogRoot->Open(IsOpen());
  47. }
  48.  
  49. VObject *DialogView::DoCreateDialog()
  50. {
  51.     return 0;
  52. }
  53.  
  54. Metric DialogView::GetMinSize()
  55. {
  56.     Metric m;
  57.     
  58.     if (testwindow) fprintf(stderr, "DialogView::GetMinSize\n");
  59.     GetDialogRoot();
  60.     if (dialogRoot) {
  61.     m= dialogRoot->GetMinSize();
  62.     SetFlag(eVObjHFixed, dialogRoot->TestFlag(eVObjHFixed));
  63.     SetFlag(eVObjVFixed, dialogRoot->TestFlag(eVObjVFixed));
  64.     }
  65.     return m;
  66. }
  67.  
  68. VObject *DialogView::SetDialog(VObject *dia, bool redraw)
  69. {
  70.     VObject *olddialog= 0;
  71.     if (dia) {
  72.     olddialog= dialogRoot;
  73.     dialogRoot= dia;
  74.     dialogRoot->SetContainer(this);
  75.     dialogRoot->Enable();
  76.     CalcLayout(redraw);
  77.     }
  78.     return olddialog;
  79. }
  80.  
  81. void DialogView::CalcLayout(bool redraw)
  82. {
  83.     if (dialogRoot) {
  84.     SetExtent(GetMinSize().Extent());
  85.     //SetOrigin(GetOrigin());
  86.     if (testwindow) fprintf(stderr, "DialogView::SetOrigin()\n");
  87.     View::SetOrigin(GetOrigin());
  88.     if (dialogRoot)
  89.         dialogRoot->SetOrigin(GetOrigin());
  90.     if (redraw)
  91.         ForceRedraw();
  92.     }
  93. }
  94.  
  95. void DialogView::SetOrigin(Point at)
  96. {
  97.     View::SetOrigin(at);
  98.     /*
  99.     if (dialogRoot)
  100.     dialogRoot->SetOrigin(at);
  101.     */
  102. }
  103.  
  104. void DialogView::SetExtent(Point e)
  105. {
  106.     View::SetExtent(e);
  107.     if (testwindow) fprintf(stderr, "DialogView::SetExtent(%d,%d)\n", e.x, e.y);
  108.     if (dialogRoot) 
  109.     dialogRoot->SetExtent(e);
  110. }
  111.  
  112. VObject *DialogView::Detect(BoolFun find, void *arg)
  113. {
  114.     VObject *v;
  115.     if (dialogRoot && (v= dialogRoot->Detect(find, arg)))
  116.     return v;
  117.     return VObject::Detect(find, arg);
  118. }
  119.  
  120. Command *DialogView::DispatchEvents(Point lp, Token &t, Clipper *vf)
  121. {    
  122.     if (dialogRoot)
  123.     return dialogRoot->Input(lp, t, vf);
  124.     return View::DispatchEvents(lp, t, vf);
  125. }
  126.  
  127. void DialogView::CollectParts(Collection *col)
  128. {
  129.     View::CollectParts(col);
  130.     col->Add(dialogRoot);
  131. }
  132.  
  133. void DialogView::EnableItem(int id, bool b)
  134. {
  135.     VObject *vop;
  136.     if (vop= FindItem(id))
  137.     vop->Enable(b, TRUE);
  138. }
  139.  
  140. VObject *DialogView::FindItem(int id)
  141. {
  142.     if (dialogRoot)
  143.     return dialogRoot->FindItem(id);
  144.     return 0;
  145. }
  146.  
  147. void DialogView::Draw(Rectangle r)
  148. {
  149.     if (dialogRoot)
  150.     dialogRoot->DrawAll(r, FALSE);
  151. }
  152.  
  153.